<html>
   <head>
      <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
   
      <title>1.3. Entendiendo el entorno</title>
      <meta name="generator" content="DocBook XSL-NS Stylesheets V1.75.2">
      <link rel="home" href="indice.html" title="Manual Usuario gvHidra">
      <link rel="up" href="ch01.html" title="Cap&iacute;tulo 1. Empezando con gvHIDRA">
      <link rel="prev" href="ch01s02.html" title="1.2. Requerimientos">
      <link rel="next" href="ch01s04.html" title="1.4. Instalaci&oacute;n del entorno">
   </head>
   <body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
      <div class="navheader">
         <table width="100%" summary="Navigation header">
            <tr>
               <th colspan="3" align="center">1.3. Entendiendo el entorno</th>
            </tr>
            <tr>
               <td width="20%" align="left"><a accesskey="p" href="ch01s02.html">Anterior</a>&nbsp;
               </td>
               <th width="60%" align="center">Cap&iacute;tulo 1. Empezando con gvHIDRA</th>
               <td width="20%" align="right">&nbsp;<a accesskey="n" href="ch01s04.html">Siguiente</a></td>
            </tr>
         </table>
         <hr>
      </div>
      <div class="section" title="1.3. Entendiendo el entorno">
         <div class="titlepage">
            <div>
               <div>
                  <h2 class="title" style="clear: both"><a name="d4e142"></a>1.3. Entendiendo el entorno
                  </h2>
               </div>
            </div>
         </div>
             
         
             
         <p>El <span class="emphasis"><em>framework</em></span> gvHIDRA sigue una arquitectura
            MVC. Esta arquitectura tiene como objeto dividir en capas diferentes la
            l&oacute;gica de negocio, la l&oacute;gica de control y la presentaci&oacute;n. Con ello
            conseguimos desarrollos m&aacute;s robustos y fuertes ante los cambios de
                requisitos. El siguiente diagrama muestra como funciona de forma
                esquem&aacute;tica la relaci&oacute;n entre capas:
         </p>
         
             
         <div class="mediaobject" align="center"><img src="images/esquemaMVC.png" align="middle"></div>
         
             
         <p>Esta divisi&oacute;n en capas se plasma f&iacute;sicamente esta divisi&oacute;n dentro de
                una aplicaci&oacute;n gvHIDRA. Concretamente, para hacer un mantenimiento, el
                programador tendr&aacute; que trabajar en las siguientes partes de la
                estructura:
         </p>
         
             
         <div class="itemizedlist">
            <ul class="itemizedlist" type="disc">
               <li class="listitem">
                          
                  <p><span class="bold"><strong>actions</strong></span>: corresponde al modelo
                             y en el se alojan las clases manejadoras. Estas clases nos permiten
                             acceder a los datos y realizar los tratamientos sobre ellos. Muchos de
                             los tratamientos y comportamientos vienen heredados de forma que
                             nuestra clase simplemente debe a&ntilde;adir el comportamiento
                             espec&iacute;fico.
                  </p>
                        
               </li>
               <li class="listitem">
                          
                  <p><span class="bold"><strong>include/mappings.php</strong></span>:
                             corresponde con el controlador. Basado en el proyecto Phrame, se
                             compone de un fichero que nos permite asociar una acci&oacute;n (solicitud
                             del usuario) con la clase que lo va a resolver.
                  </p>
                        
               </li>
               <li class="listitem">
                          
                  <p><span class="bold"><strong>views</strong></span>: corresponde con la
                             vista. En este directorio encontraremos las vistas que designar&aacute;n la
                             pantalla a visualizarse.
                  </p>
                        
               </li>
            </ul>
         </div>
         
             
         <p>Aqu&iacute; tenemos un esquema donde lo podemos ver un ejemplo de
                aplicaci&oacute;n con las capas que componen la arquitectura MVC.
         </p>
         
             
         <div class="mediaobject" align="center"><img src="images/esquemaFisicoMVCgvHIDRA.png" align="middle"></div>
         
             
         <p>A estas capas, falta a&ntilde;adir la interfaz con el usuario, las
                pantallas. Para la realizaci&oacute;n de las mismas, gvHIDRA hace uso de smarty y
                de unos plugins propios. Estos fichero, se ubican en el directorio
                templates y contienen la definici&oacute;n de una ventana con todos sus
                componentes.
         </p>
         
             
         <p>Una vez vista la estructura f&iacute;sica de una aplicaci&oacute;n, es conveniente
                ver los componentes internos del framework a trav&eacute;s del flujo interno que
                provoca una petici&oacute;n de pantalla. En el siguiente diagrama de secuencia,
                hemos colocado algunos de los actores que intervienen en el tratamiento de
                una petici&oacute;n as&iacute; como sus operaciones.
         </p>
         
             
         <div class="mediaobject" align="center"><img src="images/esquema_func_gvhidra.png" align="middle"></div>
         
             
         <p></p>
         
             
         <div class="orderedlist">
            <ol class="orderedlist" type="1">
               <li class="listitem">
                          
                  <p>El flujo se inicia con la aparici&oacute;n de un est&iacute;mulo de pantalla
                             lanzado por el usuario.
                  </p>
                        
               </li>
               <li class="listitem">
                          
                  <p>Este est&iacute;mulo es transmitido al controler (en nuestro caso
                             phrame) en forma de acci&oacute;n. Ahora es phrame quien, consultado con el
                             fichero de mapeos (fichero mappings.php) es capaz de conocer que clase
                             es la encargada de gestionar la acci&oacute;n. Una vez conocida la clase, la
                             "levanta" y le cede el control pas&aacute;ndole todos los datos de la
                             petici&oacute;n.
                  </p>
                        
               </li>
               <li class="listitem">
                          
                  <p>La clase (conocida como clase manejadora) una vez tiene el
                             control realiza varios pasos.
                  </p>
                  
                          
                  <div class="itemizedlist">
                     <ul class="itemizedlist" type="disc">
                        <li class="listitem">
                                       
                           <p>Reconecta de forma autom&aacute;tica a la base de datos (en el caso
                                          de que exista).
                           </p>
                                     
                        </li>
                        <li class="listitem">
                                       
                           <p>Parsea el contenido de la petici&oacute;n (REQUEST) encapsulando en
                                          un objeto iterador que agrupa el contenido en matrices por
                                          operaci&oacute;n.
                           </p>
                                     
                        </li>
                        <li class="listitem">
                                       
                           <p>Lanza las distintas operaciones. Estas operaciones se
                                          extienden con el comportamiento extra que a&ntilde;ade el programador. Es
                                          decir, si lanzamos una acci&oacute;n de borrado, el
                                          <span class="emphasis"><em>framework</em></span> realiza las operaciones necesarias
                                          para eliminar la tupla de la base de datos y el usuario tiene dos
                                          puntos de extensi&oacute;n opcional de dicho comportamiento: antes de
                                          borrar (m&eacute;todos pre: para validaciones) y despu&eacute;s de borrar
                                          (m&eacute;todos post: para operaciones encadenadas).
                           </p>
                                     
                        </li>
                     </ul>
                  </div>
                        
               </li>
               <li class="listitem">
                          
                  <p>Una vez finalizado todo el proceso, la clase manejadora devuelve
                             un actionForward a phrame. Este lo descompone y se localiza la views
                             seleccionada.
                  </p>
                        
               </li>
               <li class="listitem">
                          
                  <p>Finalmente, el views recoge la informaci&oacute;n y, con la plantilla
                             (fichero tpl de smarty) muestra la informaci&oacute;n en pantalla.
                  </p>
                        
               </li>
            </ol>
         </div>
           
      </div>
      <div class="navfooter">
         <hr>
         <table width="100%" summary="Navigation footer">
            <tr>
               <td width="40%" align="left"><a accesskey="p" href="ch01s02.html">Anterior</a>&nbsp;
               </td>
               <td width="20%" align="center"><a accesskey="u" href="ch01.html">Subir</a></td>
               <td width="40%" align="right">&nbsp;<a accesskey="n" href="ch01s04.html">Siguiente</a></td>
            </tr>
            <tr>
               <td width="40%" align="left" valign="top">1.2. Requerimientos&nbsp;</td>
               <td width="20%" align="center"><a accesskey="h" href="indice.html">Inicio</a></td>
               <td width="40%" align="right" valign="top">&nbsp;1.4. Instalaci&oacute;n del entorno</td>
            </tr>
         </table>
      </div>
   </body>
</html>